/**
 * 应用状态模块
 * @author 王勇程 <laughskydragon@qq.com>
 */
import { generateAccessToken } from '@/utils/auth'
import APP_CONFIG from '@/config'

const state = {
  accessToken: '',          // 系统访问令牌
  apiKey: APP_CONFIG.API_KEY,  // API密钥（从统一配置获取）
  systemConfig: {},         // 系统配置
  baseUrl: APP_CONFIG.BASE_URL,  // API基础地址（从统一配置获取）
  apiUrl: APP_CONFIG.API_URL,  // API基础地址（从统一配置获取）
  skipLogin: APP_CONFIG.SKIP_LOGIN           // 跳过登录验证（从统一配置获取）
}

const mutations = {
  SET_ACCESS_TOKEN(state, token) {
    state.accessToken = token
  },
  SET_API_KEY(state, apiKey) {
    state.apiKey = apiKey
  },
  SET_SYSTEM_CONFIG(state, config) {
    state.systemConfig = config
  },
  SET_BASE_URL(state, url) {
    state.baseUrl = url
  },
  SET_API_URL(state, url) {
    state.apiUrl = url
  },
  SET_SKIP_LOGIN(state, skip) {
    state.skipLogin = skip
  }
}

const actions = {
  // 初始化应用
  initApp({ commit, dispatch, state }) {
    // 生成access_token
    dispatch('generateAccessToken')
    
    // 如果不跳过登录，检查用户登录状态
    if (!state.skipLogin) {
      dispatch('user/checkLoginStatus', null, { root: true })
    }
  },
  
  // 生成访问令牌
  generateAccessToken({ commit, state }) {
    const accessToken = generateAccessToken()
    commit('SET_ACCESS_TOKEN', accessToken)
    return accessToken
  },
  
  // 加载系统配置
  loadSystemConfig({ commit }, config) {
    commit('SET_SYSTEM_CONFIG', config)
  },
  
  // 设置登录跳过状态
  setSkipLogin({ commit }, skip) {
    commit('SET_SKIP_LOGIN', skip)
  }
}

const getters = {
  accessToken: state => state.accessToken,
  apiKey: state => state.apiKey,
  systemConfig: state => state.systemConfig,
  baseUrl: state => state.baseUrl,
  apiUrl: state => state.apiUrl,
  skipLogin: state => state.skipLogin
}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}